package  
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.TimerEvent;
	import flash.text.TextField;
	import flash.utils.Timer;
	
	/**
	 * Класс героя. Герой периодически выполняет определённые действия.
	 * Для того, чтобы информировать об этих действиях основную программу используется 
	 * кастомный диспетчер событий.
	 */
	public class MyHero extends Sprite 
	{
		/* Таймер действий */
		public var tmrHeroActivity:Timer;
		/* Кастомный диспетчер */
		//public var actionDispatcher:MyHeroEventDispatcher;
		public function MyHero() 
		{
			//actionDispatcher = new MyHeroEventDispatcher();
			
			tmrHeroActivity = new Timer(1000);
			tmrHeroActivity.addEventListener(TimerEvent.TIMER, hanHeroActivity, false, 0, true);
			tmrHeroActivity.start();
		}
		
		/* Какие то рандомные действия героя. Для теста */
		private function hanHeroActivity(e:TimerEvent):void
		{
			var t:int = Math.round(Math.random() * 4-0.1);
			switch(t)
			{
				case 0:
				dispWalk();
				break;
				case 1:
				dispKill(Math.round(Math.random()*50+50));
				break;
				case 2:
				dispJump(Math.round(Math.random()*50+40));
				break;
				case 3:
				dispSit();
				break;
			}
		}
		
		public function removeSelf():void
		{
		}
		
		/** Инициализация кастомных событий **/
		/* Выбрасываем событие прыжок. Высота прыжка */
		public function dispJump(height:Object):void
		{
			var jumpEv:MyHeroEvent = new MyHeroEvent(MyHeroEvent.ON_JUMP);
			jumpEv.param = height;
			dispatchEvent(jumpEv);
			jumpEv = null;
		}
		
		/* Выбрасываем событие убит. Кол-во полученных очков */
		public function dispKill(score:Object):void
		{
			var killEv:MyHeroEvent = new MyHeroEvent(MyHeroEvent.ON_KILL);
			killEv.param = score;
			dispatchEvent(killEv);
			killEv = null;
		}
		
		/* Выбрасываем событие ходьба */
		public function dispWalk():void
		{
			dispatchEvent(new MyHeroEvent(MyHeroEvent.ON_WALK));
		}
		
		/* Выбрасываем событие присел */
		public function dispSit():void
		{
			dispatchEvent(new MyHeroEvent(MyHeroEvent.ON_SIT));
		}
	}

}